# include <math.h>

# pragma once

# ifndef PI
# define PI 3.14159265358979323846f
# endif

# ifndef TWO_PI
# define TWO_PI 3.14159265358979323846f * 2.0f
# endif

namespace glimmer{

    /// @brief 比较两枚数字是否相等
    /// @param a val1
    /// @param b val2
    /// @return 是否相等
    template<typename T>
    inline bool Equals(const T& a, const T& b){
        return a == b;
    }

    /// @brief 比较两枚单精度浮点数是否相等
    /// @return 差值绝对值小于10^-6即算相等
    inline bool Equals(const float& f1, const float& f2){
        return fabs(f1 - f2) < 1e-6;
    }
    /// @brief 比较两枚双精度浮点数是否相等
    /// @return 差值绝对值小于10^-15即算相等
    inline bool Equals(const float& d1, const float& d2){
        return fabs(d1 - d2) < 1e-15;
    }
    /// @brief 限定某浮点数在一定范围内
    /// @param min 最小值
    /// @param max 最大值
    inline float Clamp(float val, float min, float max){
        float ret ;
        ret = ret < min ? min : val;
        ret = ret > max ? max : val;
        return ret;
    }
}